home *** CD-ROM | disk | FTP | other *** search
Modula Implementation | 1994-01-27 | 1.9 KB | 91 lines |
- IMPLEMENTATION MODULE AMCalc;
-
- (* AMCalc presents the procedures and data types for the calculation of
- one-dimensional cellular automata.
-
- Version 1.2d by Mike Dryja March 1, 1987 *)
-
- FROM Storage IMPORT ALLOCATE, CreateHeap, DestroyHeap;
-
- TYPE
- Automata = POINTER TO RECORD
- Cell : ARRAY[1..MaxAutomata] OF CellType;
- END;
-
- VAR
- Rule : ARRAY[0..9] OF CellType;
- Length : Range;
-
- PROCEDURE EstablishRule (VAR String : RuleString);
- VAR
- i : CARDINAL;
- BEGIN
- FOR i := 0 TO 9 DO
- Rule[i] := ORD (String[i])-48;
- IF Rule[i] > 3 THEN
- Rule[i] := 3;
- String[i] := CHR (51);
- END;
- END;
- END EstablishRule;
-
- PROCEDURE Equate (VAR String : ARRAY OF CHAR; VAR InTo : Automata);
- VAR
- i : CARDINAL;
- BEGIN
- FOR i := 0 TO Length-1 DO
- InTo^.Cell[i+1] := ORD (String[i])-48;
- END;
- END Equate;
-
- PROCEDURE NextGeneration (VAR Parent, Daughter : Automata);
- VAR
- i : CARDINAL;
- BEGIN
- WITH Parent^ DO
- FOR i := 1 TO Length DO
- IF (i > 1) AND (i < Length) THEN
- Daughter^.Cell[i] := Rule[Cell[i-1] + Cell[i] + Cell[i+1]];
- ELSIF i = 1 THEN
- Daughter^.Cell[i] := Rule[Cell[i] + Cell[i+1]];
- ELSIF i = Length THEN
- Daughter^.Cell[i] := Rule[Cell[i-1] + Cell[i]];
- END;
- END;
- END;
- END NextGeneration;
-
- PROCEDURE SeeCell (State : Automata; X : Range) : CellType;
- BEGIN
- RETURN State^.Cell[X];
- END SeeCell;
-
- PROCEDURE Same (From, To : Automata);
- BEGIN
- To^ := From^;
- END Same;
-
- PROCEDURE Initialize (VAR State : Automata);
- BEGIN
- NEW (State);
- END Initialize;
-
- PROCEDURE SetLength (Value : Range);
- BEGIN
- Length := Value;
- END SetLength;
-
- PROCEDURE GetLength () : Range;
- BEGIN
- RETURN Length;
- END GetLength;
-
- PROCEDURE CloseCalc ();
- BEGIN
- DestroyHeap;
- END CloseCalc;
-
- BEGIN
- IF CreateHeap (25000) = TRUE THEN END;
- END AMCalc.
-